get_paste_point (buffer, insert_point, TRUE);
- /* If we're going to replace the selection, we insert before it to
- * avoid messing it up, then we delete the selection after inserting.
- */
if (request_data->replace_selection)
{
GtkTextIter start, end;
if (gtk_text_buffer_get_selection_bounds (buffer, &start, &end))
- *insert_point = start;
- }
-}
-
-static void
-post_paste_cleanup (ClipboardRequest *request_data)
-{
- if (request_data->replace_selection)
- {
- GtkTextIter start, end;
-
- if (gtk_text_buffer_get_selection_bounds (request_data->buffer,
- &start, &end))
{
if (request_data->interactive)
gtk_text_buffer_delete_interactive (request_data->buffer,
request_data->default_editable);
else
gtk_text_buffer_delete (request_data->buffer, &start, &end);
+
+ *insert_point = start;
}
}
}
gtk_text_buffer_insert (buffer, &insert_point,
str, -1);
- post_paste_cleanup (request_data);
-
if (request_data->interactive)
gtk_text_buffer_end_user_action (buffer);
if (text != NULL && length > 0)
{
- pre_paste_prep (request_data, &insert_point);
-
if (request_data->interactive)
gtk_text_buffer_begin_user_action (request_data->buffer);
+ pre_paste_prep (request_data, &insert_point);
+
if (!request_data->interactive ||
gtk_text_iter_can_insert (&insert_point,
request_data->default_editable))
emit_paste_done (request_data->buffer, clipboard);
if (retval)
- {
- post_paste_cleanup (request_data);
- return;
- }
+ return;
}
/* Request the text selection instead */
{
GtkTextIter insert_point;
GtkTextBuffer *buffer = request_data->buffer;
-
+
/* We're about to emit a bunch of signals, so be safe */
g_object_ref (src_buffer);
-
- pre_paste_prep (request_data, &insert_point);
-
+
+ /* Replacing the selection with itself */
+ if (request_data->replace_selection &&
+ buffer == src_buffer)
+ {
+ /* Clear the paste point if needed */
+ get_paste_point (buffer, &insert_point, TRUE);
+ goto done;
+ }
+
if (request_data->interactive)
gtk_text_buffer_begin_user_action (buffer);
+ pre_paste_prep (request_data, &insert_point);
+
if (!gtk_text_iter_equal (start, end))
{
if (!request_data->interactive ||
request_data->interactive);
}
- post_paste_cleanup (request_data);
-
if (request_data->interactive)
gtk_text_buffer_end_user_action (buffer);
+done:
emit_paste_done (buffer, clipboard);
g_object_unref (src_buffer);